package deviseMode.create.prototype;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 注册登记式单例
 * 类似Spring里面的方法，将类名注册，下次从里面直接获取
 */
public class Singleton7 {
    //Spring最底层的这个容器就是一个map，说白了，IOC容器就是一个map
    private static Map<String, Singleton7> map = new ConcurrentHashMap<String, Singleton7>();

    //每个class对应一个map的key，也就是唯一的id
    static {
        Singleton7 singleton7 = new Singleton7();
        map.put(singleton7.getClass().getName(), singleton7);
    }

    //保护默认构造函数
    protected Singleton7() {
    }

    //静态工厂方法，返回此类唯一的实例
    public static Singleton7 getInstance(String name) {
        if (name == null) {
            name = Singleton7.class.getName();
        }
        if (map.get(name) == null) {
            try {
                map.put(name, (Singleton7) Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return map.get(name);
    }
}
